using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Framework.Util;
using MakeIT.Look.Imagem.Entidades;
using MakeIT.Look.Imagem.Negocios;

namespace MakeIT.Look.Imagem.Apresentacao
{
    public partial class CadastroUsuario : System.Web.UI.Page
    {

        UsuarioVO usuarioVO = null;
        protected LookDAOT LookDAOT = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            this.LookDAOT = new LookDAOT();
            usuarioVO = (UsuarioVO)this.Session["userActive"];

            if (!IsPostBack)
            {
                Util.HabilitarCampos(false, this.panelCad);
            }

        }

        protected void Page_Unload(object sender, EventArgs e)
        {
            try
            {
                if (this.LookDAOT != null)
                    this.LookDAOT.closeDAO();
            }
            catch (Exception ex) { }
        }

        protected void grvResultado_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.grvResultado.PageIndex = e.NewPageIndex;
            btnPesquisa_Click(null, null);
        }
        /// <summary>
        /// Manipula o evento do botão btnSalvar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {

            //Declara objetos
            UsuarioVO usuarioVO = null;
            bool novoRegistro = false;

            try
            {
                //Verifica se o ID é nulo, se sim = cadastro novo
                if (string.IsNullOrEmpty(this.txtCadIdUsuario.Text))
                {
                    usuarioVO = UsuarioVO.CreateVO();
                    usuarioVO.cadastro = DateTime.Now;
                    usuarioVO.cadastradoPor = usuarioVO.user;

                    novoRegistro = true;

                }
                //Recupera dados para serem alterados
                else
                {
                    //Recupera dados
                    usuarioVO = this.LookDAOT.getUsuario(Int32.Parse(this.txtCadIdUsuario.Text));
                }

                usuarioVO.nome = this.txtCadNome.Text;
                if (string.IsNullOrEmpty(this.txtCadEmail.Text))
                    usuarioVO.email = null;
                else
                    usuarioVO.email = this.txtCadEmail.Text;
                usuarioVO.user = this.txtCadUser.Text;
                if (!this.txtCadPass.Text.Equals(this.txtCadPass2.Text))
                {
                    Util.ExibeAlert(this, "Senha e confirmação de senha não conferem.");
                    return;
                }
                else
                {
                    if (String.IsNullOrEmpty(this.txtCadPass.Text)) usuarioVO.pass = null;
                    else usuarioVO.pass = this.txtCadPass.Text;
                }
                usuarioVO.ativo = this.ddlCadAtivo.SelectedValue.Equals("S");
                if (string.IsNullOrEmpty(this.txtCadFone1.Text))
                    usuarioVO.fone1 = null;
                else
                    usuarioVO.fone1 = this.txtCadFone1.Text;
                if (string.IsNullOrEmpty(this.txtCadFone2.Text))
                    usuarioVO.fone2 = null;
                else
                    usuarioVO.fone2 = this.txtCadFone2.Text;
                if (string.IsNullOrEmpty(this.txtCadFone3.Text))
                    usuarioVO.fone3 = null;
                else
                    usuarioVO.fone3 = this.txtCadFone3.Text;
                usuarioVO.edicao = DateTime.Now;
                usuarioVO.editadoPor = usuarioVO.user;

                //Chama metodo para salvar ou criar novo registro
                if (novoRegistro)
                    usuarioVO.idUsuario = (int)this.LookDAOT.newUsuario(usuarioVO);
                else
                    this.LookDAOT.setUsuario(usuarioVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Atualiza formulario, apos salvar os dados
                this.txtCadIdUsuario.Text = usuarioVO.idUsuario.ToString();
                this.ltCadastradoPor.Text = usuarioVO.cadastradoPor;
                this.ltEditadoPor.Text = usuarioVO.editadoPor;
                this.ltDataCadastro.Text = usuarioVO.cadastro.ToString("dd/MM/yyyy");
                this.ltDataEdicao.Text = usuarioVO.edicao.ToString("dd/MM/yyyy");

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do botão btnPesquisa
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnPesquisa_Click(object sender, EventArgs e)
        {

            //Declara objetos
            int? idUsuario = null;
            string nome = null;
            string email = null;
            string user = null;
            bool? ativo = null;

            try
            {

                if (!string.IsNullOrEmpty(this.txtIdUsuario.Text))
                {
                    idUsuario = Int32.Parse(this.txtIdUsuario.Text);
                }

                if (!string.IsNullOrEmpty(this.txtNome.Text))
                {
                    nome = this.txtNome.Text;
                }

                if (!string.IsNullOrEmpty(this.txtEmail.Text))
                {
                    email = this.txtEmail.Text;
                }

                if (!string.IsNullOrEmpty(this.txtUser.Text))
                {
                    user = this.txtUser.Text;
                }

                if (!this.ddlAtivo.SelectedValue.Equals(" "))
                {
                    ativo = this.ddlAtivo.SelectedValue.Equals("S");
                }


                //Recupera a lista de registros segundo a pesquisa
                this.grvResultado.DataSource = this.LookDAOT.getUsuarios(idUsuario, nome, email, user, ativo);

                //Vincula os dados
                this.grvResultado.DataBind();
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do botão btnCancelar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            //Volta para a tab page de pesquisa
            //this.tabUsuario.ActiveTabIndex = 0;

            // Desabilita os campos para edição
            Util.HabilitarCampos(false, this.panelCad);

            // Destrava botão de edição
            this.btnEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadIdUsuario.Text));

            // Destrava botão de exclusao
            this.btnExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadIdUsuario.Text));

            // Detrava botão de novo
            this.btnNovo.Enabled = true;

            // Desabilita o botão salvar
            this.btnSalvar.Enabled = false;

        }

        protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            UsuarioVO usuarioVO = null;
            int idUsuario = 0;

            try
            {
                //Recupera os argumentos com o ID do objeto
                string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
                idUsuario = Int32.Parse(argumentos[0]);

                //Recupera o objeto
                usuarioVO = this.LookDAOT.getUsuario(idUsuario);

                this.txtCadIdUsuario.Text = usuarioVO.idUsuario.ToString();
                this.txtCadNome.Text = usuarioVO.nome;
                this.txtCadEmail.Text = usuarioVO.email;
                this.txtCadUser.Text = usuarioVO.user;
                this.txtCadPass.Text = usuarioVO.pass;
                this.ddlCadAtivo.SelectedValue = (usuarioVO.ativo == null ? " " : (usuarioVO.ativo.Value ? "S" : "N"));
                this.txtCadFone1.Text = usuarioVO.fone1;
                this.txtCadFone2.Text = usuarioVO.fone2;
                this.txtCadFone3.Text = usuarioVO.fone3;
                this.ltCadastradoPor.Text = usuarioVO.cadastradoPor;
                this.ltEditadoPor.Text = usuarioVO.editadoPor;
                this.ltDataCadastro.Text = usuarioVO.cadastro.ToString("dd/MM/yyyy");
                this.ltDataEdicao.Text = usuarioVO.edicao.ToString("dd/MM/yyyy");

                //Habilita tab page do cadastro
                this.tabUsuario.ActiveTabIndex = 1;

                //Desabilita campos para edição
                Util.HabilitarCampos(false, this.panelCad);

                //Desabilita botão salvar
                this.btnSalvar.Enabled = false;

                //Habilita botão editar
                this.btnEditar.Enabled = true;

                //Habilita botão excluir
                this.btnExcluir.Enabled = true;

                //Habilita botão novo
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        // <summary>
        // Manipula o evento editar do web form
        // </summary>
        // <param name="sender">Objeto disparador de evento</param>
        // <param name="e">Argumento do evento</param>
        protected void btnEditar_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelCad);

            // Trava apenas os text box da PK
            this.txtCadIdUsuario.Enabled = false;

            // Trava botão de edição
            this.btnEditar.Enabled = false;

            // Trava botão de exclusao
            this.btnExcluir.Enabled = false;

            // Trava botão de novo
            this.btnNovo.Enabled = false;

            // Habilita o botão salvar
            this.btnSalvar.Enabled = true;

            this.txtCadNome.Focus();
        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            //Limpa formulario, para a entrada de novo registro
            Util.LimparCampos(this.panelCad);
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelCad);

            this.ltCadastradoPor.Text = "";
            this.ltEditadoPor.Text = "";
            this.ltDataCadastro.Text = "";
            this.ltDataEdicao.Text = "";

            // Trava apenas os text box da PK
            this.txtCadIdUsuario.Enabled = false;

            // Trava botão de edição
            this.btnEditar.Enabled = false;

            // Trava botão de exclusao
            this.btnExcluir.Enabled = false;

            // Trava botão de novo
            this.btnNovo.Enabled = false;

            // Habilita o botão salvar
            this.btnSalvar.Enabled = true;

            this.txtCadNome.Focus();

        }

        protected void btnExcluir_Click(object sender, EventArgs e)
        {
            //Declara objetos
            UsuarioVO usuarioVO = null;

            try
            {
                //Cria objeto
                usuarioVO = UsuarioVO.CreateVO();
                usuarioVO.idUsuario = Int32.Parse(this.txtCadIdUsuario.Text);

                //Chama metodo para excluir registro
                this.LookDAOT.delUsuario(usuarioVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro excluido com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";

                // Trava botão de edição
                this.btnEditar.Enabled = false;

                // Trava botão de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o botão salvar
                this.btnSalvar.Enabled = false;

                // Habilita o botao novo
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }

        }

    }
}
